#ifndef __DB_H
#define __DB_H

#include "utils.h"
#include "network.h"
#include <mysql/mysql.h>

/**
 * @brief 初始化数据库连接
 *
 * @param config 服务器配置信息，用于设置数据库连接参数
 * @return MYSQL* 返回一个指向MYSQL结构体的指针，表示成功创建的数据库连接
 */
MYSQL *initDB(const ServerConfig_t *config);

/**
 * @brief 子线程创建数据库连接
 * @todo 数据库连接池
 * 仅用于给子线程额外建立数据库连接
 * @return MYSQL* 返回一个指向MYSQL结构体的指针，表示成功创建的数据库连接
 */
MYSQL *threadConnectDB();

/**
 * @brief 关闭数据库连接
 *
 * @param conn 数据库连接
 */
void closeDB(MYSQL *conn);

/**
 * @brief 数据库错误退出
 * 与数据库交互时如果发生则退出程序，打印错误信息
 * @param conn 数据库连接
 */
void exitError(MYSQL *conn);

/**
 * @brief 查询所有用户信息
 *
 * @param conn 数据库连接
 */
void selectUsers(MYSQL *conn);

/**
 * @brief 执行相应sql语句
 * @todo 自动释放result结构体？
 * @note 该函数不会释放result结构体，需要手动释放
 * @param sel 查询语句
 * @param conn 数据库连接
 */
MYSQL_RES *excutesql(const char *sel, MYSQL *conn);

#endif /* __DB_H */